import IStack from "./IStack"

//封装一个栈 
class ArrayStack<T> implements IStack<T>{
    //定义一个数组/链表，用于存储元素
    private data: T[] = []
    //实现栈中的相关方法
    //push 方法，将一个元素压入栈中
    push(element:T):void{
        this.data.push(element)
    }
    //pop方法:将栈顶的元素弹出栈（返回出去，并且从栈顶移除掉）
    pop():T | undefined{
        return this.data.pop()
    }
    //peek方法，看一眼栈顶元素，但是不进行任何操作
    peek():T | undefined{
        return this.data[this.data.length - 1]
    }
    //isEmpty 判断栈是否为空
    isEmpty():boolean{
        return this.data.length === 0
    }
    //size 返回栈的数据个数
    size():number{
        return this.data.length
    }
}

const stack1 = new ArrayStack<string>()
stack1.push('aaa')
stack1.push('bbb')
stack1.push('ccc')

// console.log(stack1.peek()) //ccc
// console.log(stack1.pop()) //ccc
// console.log(stack1.pop()) //bbb
// console.log(stack1.pop()) //aaa
// const res = stack1.pop()
// if(res){
//     console.log(res.split(''))
// }

// res?.split('')
// console.log(stack1.isEmpty())//true
// console.log(stack1.size())//0

const stack2 = new ArrayStack<number>()
stack2.push(123)
stack2.push(15)
stack2.push(888)

export default ArrayStack


